package com.gzhryc.shared_device.base;

import com.gzhryc.common.exceptions.LogicException;
import com.gzhryc.shared_device.base.models.OperateInfo;
import com.gzhryc.shared_device.common.payment.dao.db.WXRefundOrder;

/**
 * 设备订单操作接口，该接口规范设备订单：完成，撤销，退款的方法
 */
public interface IDeviceOrderOperateService<T> {

    /**
     * 订单完成，对外不区分支付方式
     * @param deviceOrder
     * @param payMoney
     * @param payServiceFactory
     * @param operateInfo
     * @return -1:处理失败，1:锁定回调后完成处理，2:已完成处理
     * @throws LogicException
     */
    int finish(T deviceOrder, Integer payMoney, IPayServiceFactory payServiceFactory,OperateInfo operateInfo) throws LogicException;

    /**
     * 订单完成后退款，订单必须已完成才可以调用
     * @param deviceOrder
     * @param refundMoney
     * @param payServiceFactory
     * @param operateInfo
     * @return -1:处理失败，1:锁定回调后完成退款，2:已退款处理
     * @throws LogicException
     */
    int refund(T deviceOrder, Integer refundMoney, IPayServiceFactory payServiceFactory, OperateInfo operateInfo)throws LogicException;

    /**
     * 订单撤销，对外不区分支付方式
     * @param deviceOrder
     * @param payServiceFactory
     * @param operateInfo
     * @return -1:处理失败，1:锁定回调后完成撤销，2:已撤销处理
     * @throws LogicException
     */
    int cancel(T deviceOrder, IPayServiceFactory payServiceFactory,OperateInfo operateInfo) throws LogicException;

    /**
     * 退款成功
     * @param refundOrder
     * @param operateInfo
     * @return -1:处理失败，1:订单撤销，2:订单部分退款，3:订单完成
     */
    int refundSuccess(WXRefundOrder refundOrder,OperateInfo operateInfo);

    /**
     * 退款失败
     * @param refundOrder
     * @param operateInfo
     * @return
     */
    boolean refundFail(WXRefundOrder refundOrder,OperateInfo operateInfo);

}
